package top.infopub.mgr.bpa.dao;


import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import top.infopub.generic.GenericDao;
import top.infopub.mgr.bpa.domain.BpaProjectDomain;
import top.infopub.mgr.bpa.domain.InnerAgrtDomain;
import top.infopub.mgr.bpa.domain.InnerLedgerDomain;
import top.infopub.mgr.bpa.vo.ContractManageVo;
import top.infopub.mgr.bpa.vo.InnerAgrtVo;
import top.infopub.mgr.bpast.domain.BpastPackDeviceDomain;
import top.infopub.model.bpa.BpaCompPlan;
import top.infopub.model.bpa.InnerAgrt;
import top.infopub.model.bpa.InnerAgrtSup;
import top.infopub.model.bpa.InnerListing;

import java.util.List;
import java.util.Map;


/** 内部协议评审(BPA_INNER_AGRT) **/
public interface InnerAgrtDao extends GenericDao<InnerAgrt, String> {

    /**
     * 根据条件查询内部协议记录
     * @param innerAgrtVo
     * @return
     * @see
     */
    Page<InnerAgrtDomain> selectByDomainWhere(InnerAgrtVo innerAgrtVo);

    /**
     * 内部协议台账
     * @param contractManageVo
     * @return
     * @see
     */
    Page<InnerLedgerDomain> selectByLedger(ContractManageVo contractManageVo);

    /**
     * 根据条件查询内部协议记录--我审批的列表
     * @param innerAgrtVo
     * @return
     * @see
     */
    Page<InnerAgrtDomain> selectMyCheckByDomainWhere(InnerAgrtVo innerAgrtVo);

    /**
     * 判断是否存在相同名称的内部协议名称
     */
    List<InnerAgrt> isExistInnerAgrtName(@Param("innerAgrtName") String InnerAgrtName,
                                   @Param("proCode") String proCode);

    /**
     * 判断是否存在相同名称的内部补充协议名称
     */
    List<InnerAgrt> isExistInnerAgrtSaName(@Param("innerAgrtSaName") String innerAgrtSaName,
                                     @Param("proCode") String proCode);

    /**
     * 添加-内部协议
     */
    void insertById(InnerAgrt innerAgrt);

    /**
     * 获取同一个项目中最新的版本号
     */
    List<InnerAgrt> selectVersionNoByProCode(@Param("proCode") String proCode,
                                             @Param("status") String status,
                                             @Param("extType") String extType);

    /**
     * 返回内部协议中的所有项目名称
     */
    List<InnerAgrt> selectInnerAgrt(@Param("visibleProCodes") String visibleProCodes);

    /**
     * 根据内部协议项目编号查询相关带入信息
     */
    InnerAgrtDomain selectByInnerAgrtProCode(@Param("proCode") String proCode,
                                             @Param("id") String ids);

    /**
     * 根据内部协议项目编号查询相关带入信息(原合同id)
     */
    InnerAgrt selectByProCodes(@Param("proCode") String proCode);

    /**
     * 根据合同签订日期 判断是否为  补充签订
     */
    InnerAgrt selectInnerAgrtSignDate();

    /**
     * 第一次添加为原合同时用
     */
    InnerAgrt selectByProCodeAndId(@Param("id") String ids, @Param("proCode") String proCode);

    /**
     * 根据id查询内部协议信息
     * @param id 主键id
     * @return
     * @see
     */
    InnerAgrtDomain selectById(String id);

    /**
     * 根据项目编号查询最新版本号
     */
    InnerAgrt selectVersionByProCode(@Param("proCode") String proCode);

    /**
     * 根据合同名称计算对内结算中的 期数(已审批通过)
     */
    int countByName(@Param("names") String names);

    /**
     * 详情
     */
    InnerAgrtVo queryById(String id);

    /**
     * 根据条件查询商务驾驶舱-总分包及设备合同分页记录
     * @param where
     * @return
     * @see
     */
    Page<BpastPackDeviceDomain> selectBpastByDomainWhere(Map<String, Object> where);

    /**
     * 判断项目名称是否存在
     */
    List<InnerAgrt> isExistProName(String proCode);

    List<BpaProjectDomain> selectProject();

    InnerAgrtSup selectSup(String innerId,String innerType);

    List<BpaCompPlan> selectPlan(String contractId,String type);

    List<InnerListing> selectListing(String id, String type);

    void deleteAgrtSup(String id,String type);

    void insertAgrtSup(InnerAgrtSup innerAgrtSup);

    void deleteListing(String id,String type);

    void deletePlan(String id, String type);

    void insertBatchListing(List<InnerListing> innerListings);

    void insertBatchPlan(List<BpaCompPlan> compPlan);
}
